package indi.woniu.mapper;

import indi.woniu.field.Tables;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * @Author: GaN601
 * @Date: 2021/12/10 12:57
 * @Description:
 */
@Repository
public interface BaseMapper {
    /**
     * 查询对应表中所有的内容
     *
     * @param table 表字段
     * @return 结果集
     */
    List<Map> selectAll(Tables table);

//    List<Map> selectMany(Tables table, Map<String, Object> packing);
    
    /**
     * 查询表, 使用字段过滤
     *
     * @param table  表映射
     * @param fields 过滤的字段和值
     * @return 结果集
     */
    List<Map<String, Object>> selectByField(@Param("table") Tables table, @Param("fields") Map<String, Object> fields);
    
    /**
     * 插入一条数据, 如果存在重复则更新
     *
     * @param table  表名
     * @param fields 字段与值
     * @return 影响的行数
     */
    Integer insert(@Param("table") Tables table, @Param("fields") Map<String, Object> fields);
    
    /**
     * 更新一条数据, 用 id 作为过滤条件
     *
     * @param table  表名
     * @param fields 更新的字段
     * @param id     id
     * @return 影响行数
     */
    Integer update(@Param("table") Tables table, @Param("fields") Map<String, Object> fields, @Param("id") Integer id);
    
    /**
     * 删除符合 id 的数据
     *
     * @param table 表名
     * @param id    id
     * @return 影响行数
     */
    Integer delete(@Param("table") Tables table, @Param("id") Integer id);
    
    /**
     * 查询一个表中的某个字段, 返回不重复的结果集
     *
     * @param table 表名
     * @param field 字段名
     * @return 结果集
     */
    List<String> selectByGroup(@Param("table") Tables table, @Param("field") String field);
}
